package com.ruoyi.project.wenyanwen.article.service.impl;

import com.ruoyi.common.utils.CacheUtil;
import com.ruoyi.common.utils.JsonUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.text.Convert;
import com.ruoyi.framework.aspectj.lang.annotation.DataSource;
import com.ruoyi.framework.aspectj.lang.enums.DataSourceType;
import com.ruoyi.project.wenyanwen.article.domain.Article;
import com.ruoyi.project.wenyanwen.article.mapper.ArticleMapper;
import com.ruoyi.project.wenyanwen.article.service.IArticleService;
import com.ruoyi.project.wenyanwen.tag.domain.ArticleTag;
import com.ruoyi.project.wenyanwen.tag.service.IArticleTagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 内容管理Service业务层处理
 *
 * @author shixiangwen
 * @date 2020-08-05
 */
@Service
@DataSource(value = DataSourceType.KKWENYANWEN)
public class ArticleServiceImpl implements IArticleService {

    @Autowired
    private ArticleMapper articleMapper;

    @Autowired
    private IArticleTagService articleTagService;

    /**
     * 查询内容管理
     *
     * @param id 内容管理ID
     * @return 内容管理
     */
    @Override
    public Article selectArticleById(Long id) {
        return articleMapper.selectArticleById(id);
    }

    /**
     * 查询内容管理列表
     *
     * @param article 内容管理
     * @return 内容管理
     */
    @Override
    public List<Article> selectArticleList(Article article) {
        List<Article> articles = articleMapper.selectArticleList(article);

        articles.forEach(item -> {

            List<String> tagNames = new ArrayList<>();
            if (!StringUtils.isEmpty(item.getTag())) {
                List<Long> tagIds = JsonUtil.toListObject(item.getTag(), Long.class);
                tagIds.forEach(tagId -> {
                    ArticleTag tag = articleTagService.selectArticleTagById(tagId);
                    if (tag != null) {
                        tagNames.add(tag.getName());
                    }
                });
            }
            item.setTagName(JsonUtil.toJson(tagNames));
        });

        return articles;
    }

    /**
     * 新增内容管理
     *
     * @param article 内容管理
     * @return 结果
     */
    @Override
    public int insertArticle(Article article) {
        return articleMapper.insertArticle(article);
    }

    /**
     * 修改内容管理
     *
     * @param article 内容管理
     * @return 结果
     */
    @Override
    public int updateArticle(Article article) {
        if (StringUtils.isNotEmpty(article.getTags())) {
            article.setTag(JsonUtil.toJson(article.getTags()));
        }
        int effect = articleMapper.updateArticle(article);
        if (effect > 0) {
            String key = "a:r:" + article.getId();
            CacheUtil.delete("kkwenyanwen", key);
        }
        return effect;
    }

    /**
     * 删除内容管理对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteArticleByIds(String ids) {
        return articleMapper.deleteArticleByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除内容管理信息
     *
     * @param id 内容管理ID
     * @return 结果
     */
    @Override
    public int deleteArticleById(Long id) {
        return articleMapper.deleteArticleById(id);
    }
}
